package chapter04;

public class Java20_Object {
    public static void main(String[] args) {
        // TODO final
        // Java中提供了一种语法，可以在数据初始化后不被修改，使用关键字：final
        // final修饰的变量，变量的值初始化后无法修改
        // final修饰的属性，JVM无法自动初始化，需要自己手动处理，但属性值不能发生变化
        // 一般将final修饰的变量称之为常量，或不可变变量
        // final可以修饰方法，但该方法不能被子类重写
        // final可以修饰类，该类不能被继承，没有子类
        // final不允许修饰构造方法
        // final可以修改方法的参数，一旦修饰，参数无法修改
        final String name = "zhangsan";
        System.out.println(name);

        // name = "lisi";  报错：Cannot assign a value to final variable 'name'

        System.out.println("--------------");

        // User20 user = new User20("wangwu");
        // User20 user = new User20();
        // user.name = "zhangsan";
        // System.out.println(user.name);
        // user.name由zhangsan -> lisi
        // user.name = "lisi";
        // System.out.println(user.name);
    }
}
final class User20{
    // 类中声明的属性其实就是类的变量
    public final String name;
    public final String name1 = "lisi";

    public User20(String name){
       this.name = name;
    }

    public final void test() {

    }

//    public User20() {
//
//    }
//    public void test (final String name) {
//        name = "lisi"; 报错：Cannot assign a value to final variable 'name'
//    }
}

//class Child20 extends User20{
//    public void test() {}
//    报错：test()' cannot override 'test()' in 'chapter04.User20'; overridden method is final
//}

//class Child20 extends User20 {
//    报错：Cannot inherit from final 'chapter04.User20'
//}